package com.cetool.autocms.controller.user;

import com.cetool.autocms.annotation.TokenAnnotation;
import com.cetool.autocms.common.PageRequest;
import com.cetool.autocms.enumeration.OperateEnum;
import com.cetool.autocms.pojo.dto.user.UserInfoDTO;
import com.cetool.autocms.pojo.request.user.DeleteUserRequest;
import com.cetool.autocms.pojo.request.user.QueryUserListRequest;
import com.cetool.autocms.pojo.request.user.SaveUserRequest;
import com.cetool.autocms.pojo.request.user.UpdateUserRequest;
import com.cetool.autocms.service.user.UserService;
import com.github.pagehelper.PageSerializable;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * 用户信息控制层
 *
 * @author 戴越
 * @date 2021/11/9
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用户信息管理")
public class UserController {
    /**
     * 注入用户信息服务
     */
    @Autowired
    private UserService userService;

    /**
     * 新增管理员用户
     *
     * @param request 新增管理员用户请求实体
     * @author 戴越
     * @date 2021/11/9
     */
    @TokenAnnotation
    @PostMapping("/saveUser")
    @ApiOperation(value = "新增管理员用户")
    public OperateEnum saveUser(@Valid @RequestBody SaveUserRequest request) {
        return userService.saveUser(request);
    }

    /**
     * 分页查询管理员用户信息列表
     *
     * @param request 分页查询管理员用户信息请求实体
     * @return 管理员用户信息分页列表
     * @author 戴越
     * @date 2021/11/10
     */
    @TokenAnnotation
    @PostMapping("/listPageUser")
    @ApiOperation(value = "分页查询管理员用户信息列表")
    public PageSerializable<UserInfoDTO> listPageUser(@RequestBody PageRequest<QueryUserListRequest> request) {
        return userService.listPageUser(request);
    }

    /**
     * 删除用户信息
     *
     * @param request 删除用户信息请求实体
     * @return 操作信息
     * @author 戴越
     * @date 2021/11/10
     */
    @TokenAnnotation
    @PostMapping("/deleteUser")
    @ApiOperation(value = "删除用户信息")
    public OperateEnum deleteUser(@Valid @RequestBody DeleteUserRequest request) {
        return userService.deleteUser(request);
    }

    /**
     * 修改管理员用户信息
     *
     * @param request 修改管理员用户请求实体
     * @return 操作信息
     * @author 戴越
     * @date 2021/11/10
     */
    @TokenAnnotation
    @PostMapping("/updateUser")
    @ApiOperation(value = "修改管理员用户信息")
    public OperateEnum updateUser(@Valid @RequestBody UpdateUserRequest request) {
        return userService.updateUser(request);
    }

}
